/**
 * 
 */
package zh.guocw.hc;

import java.io.IOException;
import java.net.InetSocketAddress;

/**
 * 考虑CPU多核问题： 一个内核对应一个Selector？ 使用Reactor模式封装Selector。
 * 
 * GET Request行为：一个用户抽象为一个Session会话，一次会话包括多次GET请求。
 *                  一次会话存在周期，每次GET请求的时间间隔。
 *                  每次的GET请求都不一样（影响网络吞吐量）——抽象一个URL提供者,关联提供策略。
 * 
 * 模拟用户上网行为： 多用户，查看网页、看图片、看视频。
 * 
 * @author GuoChangwei
 *
 */
public class GetRequestLoader {
	
	/**
	 * 主类中使用while循环，周期性检测每个内核线程运行状态，达到出现问题时自动恢复的能力。
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			while(true){
				Reactor reactor = new Reactor();
				for (int i = 0; i < 20; i++) {
					InetSocketAddress remoteAddress = new InetSocketAddress("10.56.233.59", 80);
					InetSocketAddress localAddress = new InetSocketAddress("localhost", 0);
					NioSession session = new NioSession(remoteAddress, localAddress);
					reactor.add(session);
				}
				reactor.start();
				//reactor.wakeup();
				break;
			}
			Thread.sleep(100000);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}
